Introducción a R

Crear código en R, uso colaborativo y reproducible

Manejo de datos

library(here)
library(tidyverse)
library(tm)
library(wordcloud2)
library(readxl)

datos_curso = read_excel(here("data/datos-curso.xlsx"))

str(datos_curso)
tibble [19 × 15] (S3: tbl_df/tbl/data.frame)
 $ Id                                                                    : num [1:19] 1 2 3 4 5 6 7 8 9 10 ...
 $ Hora de inicio                                                        : POSIXct[1:19], format: "2025-10-14 08:29:14" "2025-10-14 08:42:03" ...
 $ Hora de finalización                                                  : POSIXct[1:19], format: "2025-10-14 08:37:19" "2025-10-14 08:44:21" ...
 $ Correo electrónico                                                    : chr [1:19] "anonymous" "anonymous" "anonymous" "anónimo" ...
 $ Nombre                                                                : logi [1:19] NA NA NA NA NA NA ...
 $ Comentarios: DNI o documento                                          : logi [1:19] NA NA NA NA NA NA ...
 $ Curso de la primera matrícula en el programa de doctorado             : chr [1:19] "2024-25" "2023-24" "2022-23" "2023-24" ...
 $ Puntos: Curso de la primera matrícula en el programa de doctorado     : num [1:19] 0 0 0 NA NA NA NA NA NA NA ...
 $ Comentarios: Curso de la primera matrícula en el programa de doctorado: logi [1:19] NA NA NA NA NA NA ...
 $ Cuéntanos tu experiencia con R                                        : chr [1:19] "He usado R ya en anteriores ocasiones, tengo una pequeña base de conocimientos y estoy familiarizada con el lenguaje." "Usé R en el máster y para hacer algunos gráficos durante el principio de la tesis, pero me falta mucha segurida"| __truncated__ "Para mi tesis en el programa he debido desarrollar un Tn-seq, personalmente me ha costado horas de trabajo crea"| __truncated__ "He utilizado R en algunas asignaturas del grado y del máster, pero de una manera superficial." ...
 $ Puntos: Cuéntanos tu experiencia con R                                : num [1:19] 0 0 0 NA NA NA NA NA NA NA ...
 $ Comentarios: Cuéntanos tu experiencia con R                           : logi [1:19] NA NA NA NA NA NA ...
 $ Observaciones                                                         : chr [1:19] NA NA NA NA ...
 $ Puntos: Observaciones                                                 : num [1:19] 0 0 0 NA NA NA NA NA NA NA ...
 $ Comentarios: Observaciones                                            : logi [1:19] NA NA NA NA NA NA ...
 [1] "Id"                                                                    
 [2] "Hora de inicio"                                                        
 [3] "Hora de finalización"                                                  
 [4] "Correo electrónico"                                                    
 [5] "Nombre"                                                                
 [6] "Comentarios: DNI o documento"                                          
 [7] "Curso de la primera matrícula en el programa de doctorado"             
 [8] "Puntos: Curso de la primera matrícula en el programa de doctorado"     
 [9] "Comentarios: Curso de la primera matrícula en el programa de doctorado"
[10] "Cuéntanos tu experiencia con R"                                        
[11] "Puntos: Cuéntanos tu experiencia con R"                                
[12] "Comentarios: Cuéntanos tu experiencia con R"                           
[13] "Observaciones"                                                         
[14] "Puntos: Observaciones"                                                 
[15] "Comentarios: Observaciones"                                            
datos_curso_filtrado <- datos_curso |>
  rename (curso = "Curso de la primera matrícula en el programa de doctorado",
         experiencia = "Cuéntanos tu experiencia con R",
         comentarios = "Observaciones",
         email = "Correo electrónico") |>
  select (curso, experiencia, comentarios, email) |>
  mutate (email = str_replace(email, "anonymous", "anónimo")) |>
  filter (curso == "2022-23")
  
words <- tolower(
                unlist(
                  strsplit(datos_curso_filtrado$experiencia, " ") ) ) 

words <- gsub("[[:punct:][:digit:]]", "",words)
stop_es <- stopwords("spanish")
words_clean <- words[!words %in% stop_es]

# Plot
wordcloud2(data=table(words_clean), size=1,
           color = rep(RColorBrewer::brewer.pal(11, "PRGn"), 20))
# A tibble: 6 × 8
  species island    bill_length_mm bill_depth_mm flipper_length_mm body_mass_g
  <fct>   <fct>              <dbl>         <dbl>             <int>       <int>
1 Adelie  Torgersen           39.1          18.7               181        3750
2 Adelie  Torgersen           39.5          17.4               186        3800
3 Adelie  Torgersen           40.3          18                 195        3250
4 Adelie  Torgersen           NA            NA                  NA          NA
5 Adelie  Torgersen           36.7          19.3               193        3450
6 Adelie  Torgersen           39.3          20.6               190        3650
# ℹ 2 more variables: sex <fct>, year <int>
      species          island    bill_length_mm  bill_depth_mm  
 Adelie   :152   Biscoe   :168   Min.   :32.10   Min.   :13.10  
 Chinstrap: 68   Dream    :124   1st Qu.:39.23   1st Qu.:15.60  
 Gentoo   :124   Torgersen: 52   Median :44.45   Median :17.30  
                                 Mean   :43.92   Mean   :17.15  
                                 3rd Qu.:48.50   3rd Qu.:18.70  
                                 Max.   :59.60   Max.   :21.50  
                                 NA's   :2       NA's   :2      
 flipper_length_mm  body_mass_g       sex           year     
 Min.   :172.0     Min.   :2700   female:165   Min.   :2007  
 1st Qu.:190.0     1st Qu.:3550   male  :168   1st Qu.:2007  
 Median :197.0     Median :4050   NA's  : 11   Median :2008  
 Mean   :200.9     Mean   :4202                Mean   :2008  
 3rd Qu.:213.0     3rd Qu.:4750                3rd Qu.:2009  
 Max.   :231.0     Max.   :6300                Max.   :2009  
 NA's   :2         NA's   :2                                 

Visualizacion de datos

DATA VIZZZZZZ

Desde gráficos muy simples

Hasta gráficos muy complejos

quién habla con quién en “The Office” Código

Datos georeferenciados

library(rgbif)
library(ggplot2)
library(rnaturalearth)
library(sf)

datos <- occ_search(scientificName = "Lynx pardinus", limit = 100)
#head(datos$data[, c("species", "decimalLatitude", "decimalLongitude")])
df <- datos$data

# Basic map
world <- ne_countries(scale = "medium", returnclass = "sf")

# Plot
ggplot() +
  geom_sf(data = world, fill = "black", color = "grey30") +
  geom_point(data = df, aes(x = decimalLongitude, y = decimalLatitude),
             color = "darkred", size = 2, alpha = 0.7) +
  coord_sf() +
  theme_minimal()

# Basic map
spain <- ne_countries(country=c("spain", "portugal"))
plot(spain)

# Plot

ggplot() +
  geom_sf(data = spain, fill = "grey99", color = "grey30") +
  geom_point(data = df, aes(x = decimalLongitude, y = decimalLatitude),
             color = "darkgreen", size = 2, alpha = 0.7) +
  coord_sf() +
  theme_minimal()

Mapa plantas

library(FloraIberica)
map_distribution(genus = "Lavandula", species = "stoechas", size = 0.9)

Visualizaciones geniales

Valentina de Filippo